package ve.gob.ine.censo.listener;
import static ve.gob.ine.censo.service.DataReferencialService.entidadesSelect;
import static ve.gob.ine.censo.service.DataReferencialService.municipiosSelect;
import static ve.gob.ine.censo.service.DataReferencialService.parroquiasSelect;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.faces.model.SelectItem;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import org.apache.ibatis.session.SqlSession;

import ve.gob.ine.censo.dao.ibatis.Conexion;

public class CargaReferencialListerner implements ServletContextListener {
	
//	private EntidadMapper entidadDAO;
//	private MunicipioMapper municipioDAO;
//	private ParroquiaMapper parroquiaDAO;

	public CargaReferencialListerner() {

		//INICIALIZA LA CONEXION ESTATICA
		Conexion.initConexion();
		init();
	}
	
	public void init(){
			entidadesSelect = new ArrayList<SelectItem>();
			municipiosSelect = new HashMap<String,List<SelectItem>>();
			parroquiasSelect = new HashMap<String,Map<String,List<SelectItem>>>();
	}
	
	private void loadEntidad(boolean loadMunicipio, boolean loadParroquia){

		SqlSession sqlSession = Conexion.config().openSession();
		try {		
		
//			this.entidades = sqlSession.getMapper(EntidadMapper.class).selectByExample(null);
//	
//			for (Entidad entidad : entidades) {			
//				SelectItem selectItem = new SelectItem();
//				selectItem.setLabel(entidad.getNomEnt());
//				selectItem.setValue(entidad.getCodEnt());
//				entidadesSelect.add(selectItem);
//				System.out.println("-"+entidad.getNomEnt());
//				if(loadMunicipio) {
//					loadMunicipio(entidad,loadParroquia);
//				}
//			}
		} finally {
			sqlSession.close();
		}		
	}
	
//	private void loadMunicipio(Entidad entidad, boolean loadParroquia){
//		SqlSession sqlSession = Conexion.config().openSession();
//		try {		
//		
//		MunicipioExample municipioExample = new MunicipioExample();
//		municipioExample.createCriteria().andCodEntEqualTo(entidad.getCodEnt());
//		
//		this.municipios = sqlSession.getMapper(MunicipioMapper.class).selectByExampleWithBLOBs(municipioExample);
//		
//		Map<String,List<SelectItem>> municipioMap = new HashMap<String,List<SelectItem>>(); 
//		List<SelectItem> municipiosList = new ArrayList<SelectItem>();
//		
//		for (Municipio municipio : this.municipios) {
//			SelectItem selectItem = new SelectItem();			
//			selectItem.setLabel(municipio.getDescripcion());
//			System.out.println("--"+municipio.getDescripcion()+"::DESCRIPCION");
//			selectItem.setValue(municipio.getCodMun());			
//			municipiosList.add(selectItem);
//			
//			if(loadParroquia){
//				List<SelectItem> parroquiaMap = loadParroquia(municipio);
//				municipioMap.put(municipio.getCodMun(), parroquiaMap);
//			}
//		}
//
//		parroquiasSelect.put(entidad.getCodEnt(),municipioMap);		
//		
//		municipiosSelect.put(entidad.getCodEnt(), municipiosList);
//		
//		} finally {
//			sqlSession.close();
//		}
//	}

//	private List<SelectItem> loadParroquia(Municipio municipio){
//
//		List<SelectItem> parroquiaMap = new ArrayList<SelectItem>();			
////		List<Parroquia> parroquias = null;
////		
////		SqlSession sqlSession = Conexion.config().openSession();
////		try {	
////
////			
////			ParroquiaExample parroquiaExample = new ParroquiaExample();
////			parroquiaExample.createCriteria().andCodEntEqualTo(municipio.getCodEnt()).andCodMunEqualTo(municipio.getCodMun());
////			
////			parroquias = sqlSession.getMapper(ParroquiaMapper.class).selectByExample(parroquiaExample);
////			
////	//		Map<String,List<SelectItem>> municipioMap = new HashMap<String,List<SelectItem>>(); 
////			
////
////			
////			for (Parroquia parroquia : parroquias) {
////				SelectItem selectItem = new SelectItem();
////				selectItem.setLabel(parroquia.getDescripcion());
////				selectItem.setValue(parroquia.getCodParrq());
////				System.out.println("---"+parroquia.getCodParrq());
////				parroquiaMap.add(selectItem);			
////			}
////			
////	//		municipioMap.put(municipio.getCodMun(), parroquiaMap);		
////	//		parroquiasSelect.put(municipio.getCodEnt(),municipioMap);		
////		} finally {
////			sqlSession.close();
////		}
//		return parroquiaMap;
//	}	
	
	public void contextInitialized(ServletContextEvent event) {	
		
		boolean loadMunicipio = true;
		boolean loadParroquia = true;
		boolean loadCentroRecoleccion = true;
		loadEntidad(loadMunicipio, loadParroquia);
    }

	public void contextDestroyed(ServletContextEvent arg0) {
	}
}
